package com.shu.basicData;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @author ssm
 * @version V1.0
 * @description:
 * @date 2019/4/22 10:00
 */

public class MathRandom {

    private static final Logger LOGGER = LoggerFactory.getLogger(MathRandom.class);

    @Test
    @DisplayName("Random不指定 seed : 种子")
    void name() {
        for (int i = 0; i < 10; i++) {
            Random random = new Random();
            LOGGER.info(String.valueOf(random.nextInt(100)));
        }
    }


    @Test
    @DisplayName("Random指定 seed : 种子")
    // 避免 Random 实例被多线程使用，虽然共享该实例是线程安全的，但会因竞争同一 seed 导致的性能下降
    // 在 JDK7 之后，可以直接使用 API ThreadLocalRandom
    void name2() {
        for (int i = 0; i < 10; i++) {
            Random random = new Random(10);
            random.setSeed(11);
            LOGGER.info(String.valueOf(random.nextInt(100)));
        }
    }



    @Test
    @DisplayName("ThreadLocalRandom")
    void name3() {
        for (int i = 0; i < 10; i++) {
            ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();
            LOGGER.info(String.valueOf(threadLocalRandom.nextInt(100)));
        }
    }
}
